﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Crosland.Automotriz.Core;
using Crosland.Automotriz.Facade.Interface;
using Crosland.Automotriz.Facade.Facade;
using System.Configuration;
using Crosland.Automotriz.Logic.ControlExeption;

namespace Crosland.Automotriz.Web.Repuestos
{
    public partial class wFrmMateriales : System.Web.UI.Page
    {
        private static iFacadeRegistroMaterial InterfaceMaterial;

        private static IEnumerable<Object> listaMaterial = null;
        private static List<TD_SECTOR> listaSector = null;
        private static List<TD_GRUPO_ARTICULO> listaGrupoArticulo = null;
        private static IEnumerable<Object> listaMarca = null;
        private static IEnumerable<Object> listaModelo = null;
        private static IEnumerable<Object> listaRueda = null;

        private int intIdNegocio = Convert.ToInt32(ConfigurationManager.AppSettings["Negocio"]);
        //private String strvOperacion = "C";
        private static String strMsg, strTitulo;

        protected void Page_Load(object sender, EventArgs e)
        {

            if (!IsPostBack)
            {
                ListarFiltroRecuperado();
                CargaGrupoArticulo();
                CargaSector();
                CargaMarca();
                CargaModelo();
                CargaRueda();
                if (Session["boolGrabacion"] != null)
                {
                    strTitulo = (Convert.ToBoolean(Session["boolGrabacion"]) == true) ? "Grabacion Exitosa" : "ERROR";
                    strMsg = Session["strMsg"].ToString();
                    Session["boolGrabacion"] = null;
                    MostrarComentario(strMsg, strTitulo);
                }
            }

        }

        private void ListarFiltroRecuperado()
        {
            try
            {
                if (Session["vOperacion2"] == null)
                {
                    return;
                }
                if (Session["vOperacion2"].ToString() == "M")
                {
                    txtCodMaterial.Text = Session["txtcod_material"].ToString();
                    if (Session["cbonro_rueda"] != null) { cboRuedas.Value = Session["cbonro_rueda"].ToString(); }
                    if (Session["cbo_marca"] != null) { cboMarca.Value = Session["cbo_marca"].ToString(); }

                    if (Session["cbo_modelo"] != null) { cboModelo.Value = Session["cbo_modelo"].ToString(); }
                    if (Session["cbo_sector"] != null) { cboSector.Value = Session["cbo_sector"].ToString(); }
                    if (Session["cbo_grupo_articulo"] != null) { cboGrupoArticulo.Value = Session["cbo_grupo_articulo"].ToString(); }

                    if (Session["Opcion"] != null)
                    {
                        if (Session["Opcion"].ToString() == "P")
                        {
                            BuscarMaterial();
                        }
                        else if (Session["Opcion"].ToString() == "E")
                        {
                            MaterialesxAsginar();
                        }
                        else
                        {
                            return;
                        }
                    }
                    else { return; }
                }
            }
            catch (Exception ex)
            {
                GuardarExceptionLog(ex.Message, ex, "ListarFiltroRecuperado");
                MensajesError(ex.Message, ex, "ListarFiltroRecuperado");
            }
        }

        private void CargaGrupoArticulo()
        {
            try
            {
                listaGrupoArticulo = new List<TD_GRUPO_ARTICULO>();
                InterfaceMaterial = new FacadeRegistroMaterial();
                listaGrupoArticulo = InterfaceMaterial.ListarGrupoArticulo();
                cboGrupoArticulo.DataSource = listaGrupoArticulo;
                cboGrupoArticulo.TextField = "DES_GRUPO_ARTICULO_2";
                cboGrupoArticulo.ValueField = "ID_GRUPO_ARTICULO";
                cboGrupoArticulo.DataBind();
            }
            catch (DataException ex)
            {
                GuardarExceptionLog(ex.Message, ex, "CargaGrupoArticulo");
                MensajesError(ex.Message, ex, "CargaGrupoArticulo");
            }
            catch (RunException e)
            {
                GuardarExceptionLog(e.Message, e, "CargaGrupoArticulo");
                MensajesError(e.Message, e, "CargaGrupoArticulo");
            }

        }

        private void CargaSector()
        {
            try
            {
                listaSector = new List<TD_SECTOR>();
                InterfaceMaterial = new FacadeRegistroMaterial();
                listaSector = InterfaceMaterial.ListarSector();
                cboSector.DataSource = listaSector;
                cboSector.TextField = "DES_SECTOR";
                cboSector.ValueField = "ID_SECTOR";
                cboSector.DataBind();
            }
            catch (DataException ex)
            {
                GuardarExceptionLog(ex.Message, ex, "CargaSector");
                MensajesError(ex.Message, ex, "CargaSector");
            }
            catch (RunException e)
            {
                GuardarExceptionLog(e.Message, e, "CargaSector");
                MensajesError(e.Message, e, "CargaSector");
            }

        }

        private void CargaMarca()
        {
            try
            {
                listaMarca = new List<Object>();
                InterfaceMaterial = new FacadeRegistroMaterial();
                listaMarca = InterfaceMaterial.listaMarcaFiltro();
                cboMarca.DataSource = listaMarca;
                cboMarca.TextField = "des";
                cboMarca.ValueField = "id";
                cboMarca.DataBind();
            }
            catch (RunException e)
            {
                GuardarExceptionLog(e.Message, e, "CargaMarca");
                MensajesError(e.Message, e, "CargaMarca");
            }

        }

        private void CargaModelo()
        {
            try
            {
                listaModelo = new List<Object>();
                InterfaceMaterial = new FacadeRegistroMaterial();
                listaModelo = InterfaceMaterial.listaModeloFiltro();
                if (listaModelo == null)
                {
                    strMsg = "No Hay Datos Para La Marca y Nro de Rueda Seleccionado";
                    cboModelo.Enabled = false;
                    MostrarComentario(strMsg);
                    return;
                }
                cboModelo.DataSource = listaModelo;
                cboModelo.TextField = "des";
                cboModelo.ValueField = "id";
                cboModelo.DataBind();
            }
            catch (RunException e)
            {
                GuardarExceptionLog(e.Message, e, "CargaModelo");
                MensajesError(e.Message, e, "CargaModelo");
            }

        }

        private void CargaRueda()
        {
            try
            {
                listaRueda = new List<Object>();
                InterfaceMaterial = new FacadeRegistroMaterial();
                listaRueda = InterfaceMaterial.listaRuedaFiltro();
                cboRuedas.DataSource = listaRueda;
                cboRuedas.TextField = "des";
                cboRuedas.ValueField = "cod";
                cboRuedas.DataBind();
            }
            catch (RunException e)
            {
                GuardarExceptionLog(e.Message, e, "CargaRueda");
                MensajesError(e.Message, e, "CargaRueda");
            }

        }

        protected void AgregarMaterial(object sender, EventArgs e)
        {
            Session["intIdMaterial"] = null;
            Redireccionar("C");

        }

        protected void ModificarMaterial(object sender, EventArgs e)
        {
            try
            {
                int intIndex = grdMaterial.FocusedRowIndex;
                if (intIndex == -1)
                {
                    strMsg = "Debe Seleccionar una Material";
                    MostrarComentario(strMsg);
                    return;
                }

                int? intvacio = null;
                int intIdMaterial = Convert.ToInt32(grdMaterial.GetRowValues(intIndex, "ID_MATERIAL"));
                int? intIndAsignado = (grdMaterial.GetRowValues(intIndex, "IND_ASIGNADO") != null) ? Convert.ToInt32(grdMaterial.GetRowValues(intIndex, "IND_ASIGNADO")) : intvacio;
                Session["intIdMaterial"] = intIdMaterial;
                Session["intIndAsignado"] = intIndAsignado;
                Redireccionar("M");
            }
            catch (DataException ex)
            {
                GuardarExceptionLog(ex.Message, ex, "ModificarMaterial");
                MensajesError(ex.Message, ex, "ModificarMaterial");
            }
            catch (RunException exc)
            {
                GuardarExceptionLog(exc.Message, exc, "ModificarMaterial");
                MensajesError(exc.Message, exc, "ModificarMaterial");
            }
        }

        protected void ConsultarMaterial(object sender, EventArgs e)
        {
            Session["Opcion"] = "P";
            Session["intpageIndex"] = 0;
            Session["intFocusedRowIndex"] = 0;
            BuscarMaterial();
        }

        protected void LimpiarFiltros(object sender, EventArgs e)
        {

            txtCodMaterial.Text =String.Empty;
            cboRuedas.Value = null;
            cboMarca.Value = null;
            cboModelo.Value = null;
            cboSector.Value = null;
            cboGrupoArticulo.Value = null;

        }

        private void BuscarMaterial()
        {
            try
            {
                grdMaterial.DataSource = null;
                grdMaterial.DataBind();
                String strCodMaterial, strNroRuedas;
                int? intIdGrupoArticulo, intIdSector, intIdModelo, intIdMarca;

                strCodMaterial = txtCodMaterial.Text.Trim();

                int? n = null;
                if (Session["vOperacion2"] != null && Session["vOperacion2"].ToString() == "M")
                {
                    strNroRuedas = (cboRuedas.Value != null) ? cboRuedas.Value.ToString() : "";
                    intIdGrupoArticulo = (cboGrupoArticulo.Value != null) ? Convert.ToInt32(cboGrupoArticulo.Value) : n;
                    intIdSector = (cboSector.Value != null) ? Convert.ToInt32(cboSector.Value) : n;
                    intIdModelo = (cboModelo.Value != null) ? Convert.ToInt32(cboModelo.Value) : n;
                    intIdMarca = (cboMarca.Value != null) ? Convert.ToInt32(cboMarca.Value) : n;
                }
                else
                {
                    strNroRuedas = (cboRuedas.Value != null) ? cboRuedas.SelectedItem.Value.ToString() : "";
                    intIdGrupoArticulo = (cboGrupoArticulo.Value != null) ? Convert.ToInt32(cboGrupoArticulo.SelectedItem.Value) : n;
                    intIdSector = (cboSector.Value != null) ? Convert.ToInt32(cboSector.SelectedItem.Value) : n;
                    intIdModelo = (cboModelo.Value != null) ? Convert.ToInt32(cboModelo.SelectedItem.Value) : n;
                    intIdMarca = (cboMarca.Value != null) ? Convert.ToInt32(cboMarca.SelectedItem.Value) : n;
                }

                if (strCodMaterial == "" && strNroRuedas == "" && intIdGrupoArticulo == null && intIdSector == null && intIdModelo == null && intIdMarca == null)
                {
                    strMsg = "Debe Seleccionar uno de los Filtros";
                    MostrarComentario(strMsg);
                    return;
                }
                listaMaterial = new List<Object>();
                InterfaceMaterial = new FacadeRegistroMaterial();
                listaMaterial = InterfaceMaterial.BuscarMaterial(strCodMaterial, strNroRuedas, intIdMarca, intIdModelo, intIdSector, intIdGrupoArticulo);
                if (listaMaterial == null || listaMaterial.Count() == 0)
                {
                    strMsg = "No Hay Datos Para El Filtro Aplicado";
                    MostrarComentario(strMsg);
                    return;
                }
                grdMaterial.DataSource = listaMaterial;
                grdMaterial.DataBind();
                if (Session["intpageIndex"] != null)
                {
                    grdMaterial.PageIndex = Convert.ToInt32(Session["intpageIndex"].ToString());
                    Session["intpageIndex"] = null;
                }
             
                if (Session["intFocusedRowIndex"] != null)
                {
                    grdMaterial.FocusedRowIndex = Convert.ToInt32(Session["intFocusedRowIndex"]);
                    Session["intFocusedRowIndex"] = null;
                }
        
            }
            catch (RunException exc)
            {
                GuardarExceptionLog(exc.Message, exc, "BuscarMaterial");
                MensajesError(exc.Message, exc, "BuscarMaterial");
            }
        }

        protected void grdMaterial_PageIndexChanged1(object sender, EventArgs e)
        {
            if (Session["intpageIndex"] != null)
            {
                return;
            }

            if (Session["Opcion"].ToString() == "P")
            {
                BuscarMaterial();
            }
            else if (Session["Opcion"].ToString() == "E")
            {
                MaterialesxAsginar();
            }
            else
            {
                return;
            }
        }

        private void Redireccionar(String strvOpcion)
        {
            Session["vOperacion"] = strvOpcion;
            Session["txtcod_material"] = txtCodMaterial.Text;
            Session["cbonro_rueda"] = cboRuedas.Value;
            Session["cbo_marca"] = cboMarca.Value;
            Session["cbo_modelo"] = cboModelo.Value;
            Session["cbo_sector"] = cboSector.Value;
            Session["cbo_grupo_articulo"] = cboGrupoArticulo.Value;
            Session["intpageIndex"] = grdMaterial.PageIndex.ToString();
            Session["intFocusedRowIndex"] = grdMaterial.FocusedRowIndex.ToString();
            Response.Redirect("~/Repuestos/wFrmMaterialesActualizar.aspx?id=" + intIdNegocio, false);
        }

        private void MostrarComentario(String msg)
        {
            CargarAlert(msg, "Mensaje");
        }

        private void MostrarComentario(String msg, String titulo)
        {
            CargarAlert(msg, titulo);
        }

        private void CargarAlert(String msg, String titulo)
        {
            popupMsj.HeaderText = titulo;
            lblmsj.Text = msg;     
            string script = "ShowMsj();";
            ScriptManager.RegisterStartupScript(this, typeof(Page), "carga", script, true);
        }

        protected void grdMaterial_AfterPerformCallback(object sender, DevExpress.Web.ASPxGridView.ASPxGridViewAfterPerformCallbackEventArgs e)
        {
            if (Session["Opcion"].ToString() == "P")
            {
                BuscarMaterial();
            }
            else if (Session["Opcion"].ToString() == "E")
            {

                this.MaterialesxAsginar();
            }
            else
            {
                return;
            }

        }

        protected void MaterialesxAsignar(object sender, EventArgs e)
        {
            Session["Opcion"] = "E";
            MaterialesxAsginar();
        }

        private void MaterialesxAsginar()
        {
            try
            {
                listaMaterial = new List<Object>();
                InterfaceMaterial = new FacadeRegistroMaterial();
                listaMaterial = InterfaceMaterial.listaMaterialxAsignar();
                if (listaMaterial.Count() == 0)
                {
                    strMsg = "No Hay Materiales a Asignar";
                    MostrarComentario(strMsg);
                    return;
                }
                grdMaterial.DataSource = listaMaterial;
                grdMaterial.DataBind();
                if (Session["intpageIndex"] != null)
                {
                    grdMaterial.PageIndex = Convert.ToInt32(Session["intpageIndex"].ToString());
                    Session["intpageIndex"] = null;
                }
                if (Session["intFocusedRowIndex"] != null)
                {
                    grdMaterial.FocusedRowIndex = Convert.ToInt32(Session["intFocusedRowIndex"]);
                    Session["intFocusedRowIndex"] = null;
                }
            }
            catch (RunException exc)
            {
                GuardarExceptionLog(exc.Message, exc, "MaterialesxAsginar");
                MensajesError(exc.Message, exc, "MaterialesxAsginar");
            }

        }

        protected void Salir(object sender, EventArgs e)
        {
            Nuevo();
            Response.Redirect("~/Repuestos/wFrmDefault.aspx?id=" + intIdNegocio, false);
        }

        private void Nuevo()
        {
            Session["intpageIndex"] = null;
            Session["intFocusedRowIndex"] = null;
            Session["Opcion"] = null;
            Session["cbo_grupo_articulo"] = null;
            Session["cbo_sector"] = null;
            Session["cbo_modelo"] = null;
            Session["cbo_marca"] = null;
            Session["cbonro_rueda"] = null;
            Session["txtcod_material"] = null;
            Session["vOperacion"] = null;
            Session["vOperacion2"] = null;
            Session["intIndAsignado"] = null;
            Session["intIdMaterial"] = null;
        }

        private void MensajesError(String msgUsu, Exception ex, String metError)
        {
            Crosland.Automotriz.Web.UserControl.MensajeError uc = (Crosland.Automotriz.Web.UserControl.MensajeError)Master.FindControl("ucErrorMensaje");
            String msgReal, fhError, pagError, codUsu;
            msgReal = (ex.InnerException != null) ? ex.InnerException.Message : ex.Message;
            pagError = new System.IO.FileInfo(Page.Request.Url.AbsolutePath).Name;
            codUsu = Session["User"].ToString();
            fhError = DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss");
            System.Diagnostics.StackTrace trace = new System.Diagnostics.StackTrace(ex, true);
            int number = 0;
            for (int i = 0; i < trace.FrameCount; i++)
            {
                System.Diagnostics.StackFrame sf = trace.GetFrame(i);
                number = sf.GetFileLineNumber();
            }
            uc.Errores(msgUsu, msgReal, fhError, pagError, metError, codUsu, number);
        }
        private void GuardarExceptionLog(String msgUsu, Exception ex, String metError)
        {
            try
            {
                String msgReal, fhError, pagError, codUsu;
                msgReal = (ex.InnerException != null) ? ex.InnerException.Message : ex.Message;
                pagError = new System.IO.FileInfo(Page.Request.Url.AbsolutePath).Name;
                codUsu = Session["User"].ToString();
                System.Diagnostics.StackTrace trace = new System.Diagnostics.StackTrace(ex, true);
                int number = 0;
                for (int i = 0; i < trace.FrameCount; i++)
                {
                    System.Diagnostics.StackFrame sf = trace.GetFrame(i);
                    number = sf.GetFileLineNumber();
                }
                fhError = DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss");
                new Logg().ErrorLog(Server.MapPath("~/Logs/ErrorLog.csv"), msgUsu, msgReal, pagError, metError, codUsu,number );
            }
            catch (DataException e)
            {

                MensajesError(e.Message, e, "GuardarExceptionLog");
            }
            catch (RunException re)
            {
                MensajesError(re.Message, re, "GuardarExceptionLog");
            }

        }
    }
}